Computer workstations provide system users with powerful tools to support a number of functions. An example of one of the more useful functions which workstations provide is the ability to perform highly detailed graphics simulations for a variety of applications. Graphics simulations are particularly useful for engineers and designers performing computer aided design (CAD) and computer aided manufacturing (CAM) tasks.
Modern workstations having graphics capabilities utilize "window" systems to accomplish graphics manipulations. An emerging standard for graphics window systems is the "X" window system developed at the Massachusetts Institute of Technology. The X window system is described in K. Akeley and T. Jermoluk, "High-Performance Polygon Rendering", Computer Graphics, 239-246, (August 1988). Modern window systems in graphics workstations must provide high-performance, multiple windows yet maintain a high degree of user interactivity with the workstation. Previously, software solutions for providing increased user interactivity with the window system have been implemented in, graphics workstations. However, software solutions which increase user interactivity with the system tend to increase processor work time, thereby increasing the time in which graphics renderings to the screen in the workstation may be accomplished.
A primary function of window systems in graphics workstations is to provide the user with simultaneous access to multiple processes on the workstation. However, each of these processes provides an interface to the user through its own area onto the workstation display. The overall result is an increase in user productivity since the user can manage more than one task at a time with multiple windows. However, each process associated with a window views the workstation resources as if it were the sole owner. Thus, resources such as the processing unit, memory, peripherals and graphics hardware must be shared between these processes in a manner which prevents interprocess conflicts on the workstation.
Typical graphics systems utilize a graphics pipeline which interconnects a "host" processor to the various hardware components of the graphics system and which provides the various graphics commands available to the system. The host processor is interfaced through the graphics pipeline to a "transform engine" which generally comprises a number of parallel floating point processors. The transform engine performs a multitude of system tasks including context management, matrix transformation calculations, light modeling and radiosity computations, and control of vector and polygon rendering hardware.
In graphics systems, some scheme must be implemented to "render" or draw graphics primitives to the system screen. A "graphics primitive" is a basic component of a graphics picture such as, for example, a polygon or vector. All graphics pictures are formed from combinations of these graphics primitives. Many schemes may be utilized to perform graphics primitives rendering. Regardless of the type of graphics rendering scheme utilized by the graphics workstation, the transform engine is essential in managing graphics rendering.
A graphics "frame buffer" is interfaced further down the pipeline from the host processor and transform engine in the graphics window system. A "frame buffer" generally comprises a plurality of video random access memory (VRAM) computer chips which store information concerning pixel activation on the display corresponding to the particular graphics primitives which will be rendered to the screen. Generally, the frame buffer contains all of the data graphics information which will be written onto the windows, and stores this information until the graphics system is prepared to display this information on the workstation's screen. The frame buffer is generally dynamic and is periodically refreshed until the information stored on it is output to the screen.
Computer graphics workstations convert image representations stored in the computer's memory to image representations which are easily understood by humans. The image representations are typically displayed on cathode ray tube (CRT) devices divided into arrays of pixel elements which can be stimulated to emit a range of colored light. The particular color of light that a pixel emits is called its "value". Display devices such as CRTs typically stimulate pixels sequentially in some regular order, such as left to right and top to bottom, and repeat the sequence 50 to 70 times a second to keep the screen refreshed.
Frame buffers in modern graphics workstations may divide pixel value data into a plurality of horizontal strips, with each strip being further subdivided into a plurality of tiles. See, e.g. U.S. Pat. No. 4,780,709, Randall. Each tile represents a portion of the window to be displayed on the screen, and each tile is further defined by tile descriptors which include memory address locations of data to be displayed in that particular tile. Thus, the tiles generally contain a plurality of pixels, although a tile can be as small as one pixel in width. Each viewing window on the frame buffer may be arbitrarily shaped by combinations of different tiles which may be rectangularly shaped.
Typical graphics window systems are adapted to support block move operations of pixel value data on a frame buffer in order to maximize system performance. These block move operations are usually designed to support basic window primitives including raster texts and icons. Various types of graphics block moves are accomplished on existing frame buffers such as shuffles, and block resizes.
A block of pixel value data may be considered as an entire window, or merely part of a window comprising a set of graphics primitives on the graphics system. Block moves are particularly difficult to handle in a graphics window environment because window offset addresses need to be included in these operations which are typically implemented as screen address relative. In contrast, block move operations inside a window must be window relative so that forcing all block moves within a graphics system to be window relative is neither an adequate nor versatile solution.
Heretofore, block move operations inside a window have not necessarily been window relative, but have always been performed according to frame buffer relative addresses where a window may be located any place within the frame buffer address space. However, many graphics objects or primitives, such as for example fonts, are stored in off-screen memory on the frame buffer and thus these objects are identified exclusively according to frame buffer relative addresses. Furthermore, moving blocks of pixel data between source and destination addresses in prior frame buffer systems is usually accomplished in software through the graphics pipeline which requires the system to make decisions about the particular rendering coordinate system of the window simultaneously as the window traverses the pipeline. Thus, additional processor overhead time is incurred while manipulating graphics primitives according to frame buffer relative addresses which necessarily occurs in parallel with the processing of the graphics application in the pipeline. This is a highly undesirable utilization of a graphics pipeline computer system.
There is a long-felt need in the art for graphics window systems which move blocks of pixel value data between source windows and destination windows within a frame buffer in an efficient manner while minimizing system processor time. Furthermore, there is a need in the art for pixel data block move operations which can be accomplished independently of graphics software commands from a host processor. These needs have not heretofore been solved by prior graphics frame buffer systems.